热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

字形|都会_CSS字体加密反反爬通用方法

篇首语:本文由编程笔记#小编为大家整理,主要介绍了CSS字体加密反反爬通用方法相关的知识,希望对你有一定的参考价值。文章目录

篇首语:本文由编程笔记#小编为大家整理,主要介绍了CSS字体加密反反爬通用方法相关的知识,希望对你有一定的参考价值。



文章目录


    • 前言
    • 环境配置
      • 下载tesseract
      • 下载训练集

    • 识别代码
    • 效果演示
    • 58同城招聘



前言

对于CSS字体加密,我目前遇到了这几种情况:


  1. 字体字形坐标点与编码之间的对应关系不会随着多次请求而变化,例如:58同城房子出租
  2. 字体字形坐标点每次请求时,位置不固定,但是每个文字的打点数量一致,例如:猿人学第7题
  3. 字体的打点坐标点与打点数量随着每次请求都会发生变换,例如:58同城招聘

我们之所以认为1这个形状是数字一。是因为我们通过学习后才懂得,“哦!这个是 ‘1‘ 。”

所以,为了让电脑识别出文字,就可以依靠机器学习,啊,但是我不会。直接上手机器学习针对的是比较难识别的图像,例如:复杂的验证码。

对于有规则的字体,我们就可以借助OCR(光学字符识别)识别文字。

本文使用到就是**tesseract-ocr+简体中文训练集**

大致流程:

根据已有的字体文件,将这些字体绘制到图片上,再通过OCR识别这些字符。

注意:


  1. 字体越多,识别花费的时间就越长;
  2. 能通过字体文件规律解密的,则不建议使用这种方法;

环境配置

环境配置参考文章:
https://blog.csdn.net/u010454030/article/details/80515501


下载tesseract

tesseract-ocr-setup-3.05.02下载


下载训练集

中文训练集下载


识别代码

# -*- coding: utf-8 -*-
"""
Created on 2021/4/27 16:34
---------
@summary:
---------
@author: mkdir700
@email: mkdir700@gmail.com
"""

import base64
import numpy
import pytesseract
from fontTools.ttLib import TTFont
from PIL import Image, ImageDraw, ImageFont
def fontConvert(fontPath):
"""
解析字体文件
:param fontPath: 字体文件路径
:return: 编码和汉字的对应关系
"""

font = TTFont(fontPath)
codeList = font.getGlyphOrder()[1:]
# print(codeList)

# 创建画布
im = Image.new("RGB", (1800, 1000), (255, 255, 255))
dr = ImageDraw.Draw(im)

# 加载字体文件对象
font = ImageFont.truetype(fontPath, 40)

word_count = len(codeList)
if word_count >= 40:
lines = word_count // 40 # 文字排列的行数,在图片上分行展示
else:
lines = word_count
arrayList = numpy.array_split(codeList, lines)
# print(arrayList)

# 将字体文件中的文字绘制成图片
for t in range(lines):
newList = [i.replace("uni", "\\\\u") for i in arrayList[t]]
text = "".join(newList)
text = text.encode('utf-8').decode('unicode_escape')
dr.text((0, 50 * t), text, font=font, fill="#000000")

im.save("temp.jpg")
# im = Image.open("temp.jpg") #可以将图片保存到本地,以便于手动打开图片查看
result = pytesseract.image_to_string(im, lang="chi_sim")
result = result.replace(" ", "").replace("\\n", "")
codeList = [i.replace("uni", "&#x") for i in codeList]
return dict(zip(codeList, list(result)))
if __name__ == '__main__':
b = "xxxx="
content: bytes = base64.b64decode(b.encode())
with open('./1.ttf', 'wb') as f:
f.write(content)
print(fontConvert('./1.ttf'))


效果演示

站点:58同城

地址:https://bj.58.com/searchjob/

右键查看源代码可查看字体文件的base64编码


站点:大众点评

地址:http://www.dianping.com/shop/H7CLU1zL7C5X891z


推荐阅读
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。 ... [详细]
  • 湍流|低频_youcans 的 OpenCV 例程 200 篇106. 退化图像的逆滤波
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了youcans的OpenCV例程200篇106.退化图像的逆滤波相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 从C#Byte数组加载图像,并使用AngularJS将图像放在html标记中我正在使用ByteArrayforms的Image,因为我正在使用以下C#方法转换字节数组publicH ... [详细]
  • 快递100企业版物流快递接口使用流程
    varis_mobinavigator.userAgent.toLowerCase().match((ipod|iphone|android|coolpad|mmp|smartph ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 如何在Windows窗体应用程序中实现文件加密与解密功能
    本文介绍了在Windows窗体应用程序中实现文件加密与解密功能的步骤。首先,通过新建项目选择Windows窗体应用程序,并在自动创建的From1中构建启动窗体。然后,选择要加密的文件并获取页面的密码,判断密码是否大于六位数。如果不满足条件,提示用户添加文件后缀(.mr)以表示该文件已加密,并将文件内容进行乱码处理。通过本文的方法,可以实现文件的安全加密与解密。 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
  • 动态多点××× 单云双HUB
    动态多点是一个高扩展的IPSEC解决方案传统的ipsecS2S有如下劣势1.中心站点配置量大,无论是采用经典ipsec***还是采用greoveripsec多一个分支 ... [详细]
  • [AWS DA] Database types & SSL
    YoucanletAWStocreateaSSLcertificatesforyouandmanageforyoubyusingAWSCetrficateManager.Basic ... [详细]
  • 技术分享:如何在没有公钥的情况下实现JWT密钥滥用
      ... [详细]
author-avatar
手机用户2502900175
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有